<template>
  <div>
    <el-card shadow="always" :body-style="{ padding: '20px' }">
      <!-- 三级分类公共组件 -->
      <CategorySelector :disabled="showState !== 1"></CategorySelector>
    </el-card>

    <!-- Spu列表 Spu表单 Sku表单 -->
    <el-card shadow="always" :body-style="{ padding: '20px' }" style="margin-top: 20px;">
      <!-- Spu列表 -->
      <SpuList v-if="showState === 1" @changeState="changeState"></SpuList>

      <!-- Spu表单 -->
      <SpuForm v-else-if="showState === 2" :spu="spu" @changeState="changeState"></SpuForm>
      
      <!-- Sku表单 -->
      <SkuForm v-else :spu="spu"  @changeState="changeState"></SkuForm>
    </el-card>
    
  </div>
</template>
<script lang="ts">
  import { defineComponent } from 'vue';
  export default defineComponent({
    name:'Spu'
  })
</script>
<script lang="ts" setup>
// 引入组件
import SpuList from './components/SpuList/index.vue'
import SpuForm from './components/SpuForm/index.vue'
import SkuForm from './components/SkuForm/index.vue'
// 引入数据类型
import type { SpuData } from '@/api/spu';

// 引入ref
import {ref} from 'vue' 
// 定义 showState 用来选择分别展示 Spu列表 Spu表单 Sku表单 三个组件
const showState = ref(1)

// 定义一个spu数据保存row
const spu = ref<SpuData>({
  spuName: '',
  description: '',
  category3Id: '',
  tmId: '',
  spuSaleAttrList: [],
  spuImageList: []
})
// 定义自定义事件的回调
const changeState = (num:number,row:SpuData) => {
  // 修改 showState 的值来展示组件
  showState.value = num
  /* 回调函数需要判断有没有row传递过来，有row代表点击的是修改，没有代表点击的添加 */
  if(row){
    // 代表点击的是修改spu按钮
    // 我们需要把row通过props再传递给spuForm界面进行回显  此时有id
    // 此时我们就得定义一个数据保存row，否则没法传递给spuform，后期收集也是收集在这个有id的对象当中
    spu.value = row
  }else{
    // 代表点击的是添加spu按钮
    // 需要把spu进行重新初始化，也是要传递给spuForm，为了添加的时候收集数据
    spu.value = {
      spuName: '',
      description: '',
      category3Id: '',
      tmId: '',
      spuSaleAttrList: [],
      spuImageList: []
    }
  }
}

</script>

<style lang="less" scoped>
</style>
